var http = require('http');

var url = require('url');
var util = require('util');
var querystring = require('querystring');

var formidable = require('formidable');

http.createServer(function (req, res) {

  // console.log(req.url);
  // /aa/bb/index.html?name=good&age=123&hoby=qq&hoby=ww

  // var urlPath = req.path;

// for (var i in req) {
//   console.log(i);
// }

  // console.log(req.files);



/*
    // 定义了一个post变量，用于暂存请求体的信息
    var post = '';     
 
    // 通过req的data事件监听函数，每当接受到请求体的数据，就累加到post变量中
    req.on('data', function(chunk){    
        post += chunk;
    });
 
    // 在end事件触发后，通过querystring.parse将post解析为真正的POST请求格式，然后向客户端返回。
    req.on('end', function(){    
        post = querystring.parse(post);

        console.log(post);

        // post 请求，参数：
        // username:admin
        // password:123456
        // 结果
        // application/x-www-form-urlencoded 时
        //    { username: 'admin', password: '123456' }
        // form-data时：
        //    { '----------------------------060761147966113064233524\r\nContent-Disposition: form-data; name': '"username"\r\n\r\nadmin\r\n----------------------------060761147966113064233524\r\nContent-Disposition: form-data; name="password"\r\n\r\n123456\r\n----------------------------060761147966113064233524--\r\n' }
        
        res.end(util.inspect(post));
    });
*/



// https://cnodejs.org/topic/4f5c62932373009b5c0b027b

    var form = new formidable.IncomingForm(); 
    var post = {},
         fileArray = [];
    form.uploadDir = './tmp';  //文件上传 临时文件存放路径 

    form
        .on('error', function(err) {
            console.log(err); //各种错误
        })
         //POST 普通数据 不包含文件 field 表单name value 表单value 
        .on('field', function(field, value) { 
            if (form.type == 'multipart') {  //有文件上传时 enctype="multipart/form-data" 
                if (field in post) { //同名表单 checkbox 返回array 同get处理
                    if (util.isArray(post[field]) === false) {
                        post[field] = [post[field]];
                    }
                    post[field].push(value);
                    return;
                }
            }
            post[field] = value;
        })
        .on('file', function(field, file) { //上传文件
          console.log(field);
          console.log(file);
            // fileObj[field] = file;
            fileArray.push(file);
        })
        .on('end', function() {
            // fn(); //解析完毕 做其他work
            
            console.log(fileArray);

            // post 请求，参数：
            // username:admin
            // password:123456
            console.log(post);
            //    { username: 'admin', password: '123456' }
            res.end(util.inspect(post));
            //    { username: 'admin', password: '123456' }
        });
    form.parse(req); //解析request对象




// 文件
/*
    var form = new formidable.IncomingForm();
    form.uploadDir = configs.productPath;
    form.keepExtensions = true;
    var files = [];

    form.on('file', function (filed, file) {
        files.push([filed, file]);
    });//whenever a file is received, this will add the file info to the array

    form.parse(req, function (err, fields) {
        assert.equal(err, null);
//traverse the files here
        }
    });
*/





  // 发送 HTTP 头部 
  // HTTP 状态值: 200 : OK
  // 内容类型: text/plain
  // res.writeHead(200, {'Content-Type': 'text/plain'});

  // 发送响应数据 "Hello World"
  // res.end('Hello World\n');
}).listen(8888);

// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');

